package frsf.cidisi.exercise.proyectoia.search;

import java.util.ArrayList;

import frsf.cidisi.exercise.proyectoia.clasesProyectoIA.*;
import frsf.cidisi.faia.agent.Action;
import frsf.cidisi.faia.agent.Perception;
import frsf.cidisi.faia.environment.Environment;

public class DroneMapa extends Environment {

    public DroneMapa() {
        // Create the environment state
        this.environmentState = new StateMapa();
    }

    public StateMapa getEnvironmentState() {
        return (StateMapa) super.getEnvironmentState();
    }

    /**
     * This method is called by the simulator. Given the Agent, it creates
     * a new perception reading, for example, the agent position.
     * @param agent
     * @return A perception that will be given to the agent by the simulator.
     */
    @Override
    public  DronePerception getPercept() {
        // Create a new perception to return
         DronePerception perception = new DronePerception();
         StateMapa ambiente = this.getEnvironmentState();
         
         
         int nivel = ambiente.getNivDrone();
         perception.setNivel(nivel);
         switch(nivel){
         	case 1:
         		perception.setIntensidadMedios(ambiente.getMapa().intensidadNivelAlto());
         		break;
         	case 2:
         		perception.setIntensidadMedios(ambiente.getMapa().intensidadNivelAlto());
         		switch(ambiente.getCuadranteMedioDrone().getNumero()){
         		case 1: perception.setIntensidadBajos(ambiente.getMapa().getCuadranteIndex(1).getIntesidadCuadrantesBajos());			
         				break;
         		case 2:	perception.setIntensidadBajos(ambiente.getMapa().getCuadranteIndex(2).getIntesidadCuadrantesBajos());
         				break;
         		case 3: perception.setIntensidadBajos(ambiente.getMapa().getCuadranteIndex(3).getIntesidadCuadrantesBajos());
         				break;
         		case 4:	perception.setIntensidadBajos(ambiente.getMapa().getCuadranteIndex(4).getIntesidadCuadrantesBajos());
         				break;
         		}
         		
         		break;
         	case 3:
         		perception.setIntensidadMedios(ambiente.getMapa().intensidadNivelAlto());
         		switch(ambiente.getCuadranteMedioDrone().getNumero()){
         		case 1: perception.setIntensidadBajos(ambiente.getMapa().getCuadranteIndex(1).getIntesidadCuadrantesBajos());			
         				break;
         		case 2:	perception.setIntensidadBajos(ambiente.getMapa().getCuadranteIndex(2).getIntesidadCuadrantesBajos());
         				break;
         		case 3: perception.setIntensidadBajos(ambiente.getMapa().getCuadranteIndex(3).getIntesidadCuadrantesBajos());
         				break;
         		case 4:	perception.setIntensidadBajos(ambiente.getMapa().getCuadranteIndex(4).getIntesidadCuadrantesBajos());
         				break;
         		}
         		ArrayList<ArrayList<Integer>> lista = ambiente.getCuadranteBajoDrone().mirar(ambiente.getCoordDrone().getCoordenada());
         		perception.setPersonasEnEsquinaActual(lista.get(0).get(0).intValue());
         		perception.setPersonasAlNorte(lista.get(1));
         		perception.setPersonasAlSur(lista.get(2));
         		perception.setPersonasAlEste(lista.get(3));
         		perception.setPersonasAlOeste(lista.get(4));
         		perception.setPersonasEnDiagonal(lista.get(5).get(0).intValue());
         }
         
        // Return the perception
        return perception;
    }

    
    public String toString() {
        return environmentState.toString();
    }

    
    public boolean agentFailed(Action actionReturned) {

        StateMapa envState =
                this.getEnvironmentState();

        // TODO: Complete Method        

        return false;
    }

	//TODO: Complete this section with agent-specific methods
    // The following methods are agent-specific:
    
   
    
}
